package com.example.prueba1clinicacliente;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;

import org.json.JSONException;
import org.json.JSONObject;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;

import com.google.gson.JsonObject;

/**
 * Esta clase permite actualizar los datos del paciente enviando estos en formato JSON hacia el webservice.
 * @author Renew21
 *
 */
public class ActualizarPaciente extends Activity{

	private String URL = Constantes.HOST + "/ServicioWebSoap/services/CarteleraCineORMWS";
	private String NAMESPACE = "http://com.webservice.orm";

	private Paciente paciente;
	private EditText rutPaciente;
	private EditText nombre;
	private EditText direccion;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.actualizar_paciente);
		rutPaciente = (EditText) findViewById(R.id.txt_rut_act);
		nombre = (EditText) findViewById(R.id.txt_nombre_act);
		direccion = (EditText) findViewById(R.id.txt_direccion_act);
		
		
		paciente = (Paciente) getIntent().getExtras().getSerializable("paciente");
		Log.d("", paciente.toString());
		rutPaciente.setText(paciente.getRut());
		nombre.setText(paciente.getNombre());
		direccion.setText(paciente.getDireccion());
		
		
	}

	/**
	 * Se crea un formato JSON para enviar los datos al web service.
	 * @param v Se recibe el clic del boton guardar del layout.
	 */
	public void guardarPaciente(View v){
		JsonObject jsonObjectPaciente = new JsonObject();

		jsonObjectPaciente.addProperty("rut", rutPaciente.getText().toString());
		jsonObjectPaciente.addProperty("nombre", nombre.getText().toString());
		jsonObjectPaciente.addProperty("direccion", direccion.getText().toString());
		Log.d("",jsonObjectPaciente.toString());
		new ActualizarPacienteBackground().execute(jsonObjectPaciente.toString());
	}
	

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_paciente, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        //Se envia al webservice el rut del paciente que se desea eliminar de la base de datos.
            case R.id.eliminar_paciente:
            	Log.d("",paciente.getRut());
            	new EliminarPacienteBackground().execute(Integer.parseInt(paciente.getRut()));
            	return true;
            default:
                return true;
        }
    }

	/**
	 * Esta clase permite actualizar los datos del paciente seleccionado.
	 * @author Renew21
	 *
	 */
	class ActualizarPacienteBackground extends AsyncTask<String, Void, String>{

		private ProgressDialog progressDialog;

		@Override
		protected void onPreExecute() {
			progressDialog = ProgressDialog.show(
					ActualizarPaciente.this,
					"Pacientes", 
					"Espere mientras se cargan los datos existentes...", 
					true);
			super.onPreExecute();
		}

		@Override
		protected String doInBackground(String... params) {

			//Se invoca el metodo actualizarPaciente creado en el web service.
			String resultado = new String();
			String METHOD_NAME = "actualizarPaciente";
			String SOAP_ACTION = NAMESPACE +"/" +METHOD_NAME;
			SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
			SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			soapEnvelope.dotNet = true;
			soapEnvelope.implicitTypes = true;
			soapEnvelope.setOutputSoapObject(request);

			//Se envian por parametro los datos que se quieren ingresar a la base de datos por medio del formato JSON.
			request.addProperty("jsonPelicula", params[0]);

			HttpTransportSE aht = new HttpTransportSE(URL);

			try {
				aht.call(SOAP_ACTION, soapEnvelope);
				SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
				resultado = resultString.toString();

			} catch (IOException e) {
				e.printStackTrace();
			} catch (XmlPullParserException e) {
				e.printStackTrace();
			}

			return resultado;
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			progressDialog.dismiss();
			
			//Valido que tenga la informacion necesaria
			if("1".equals(result)){
				Toast.makeText(ActualizarPaciente.this, "Ingresada correctamente", Toast.LENGTH_LONG).show();
				finish();
			}else{
				Toast.makeText(ActualizarPaciente.this, "Error al obtener la informacion necesaria", Toast.LENGTH_LONG).show();
			}
		}
	}

	/**
	 * Esta clase permite borrar de la base de datos a un paciente a traves de su rut.
	 * @author Renew21
	 *
	 */
	class EliminarPacienteBackground extends AsyncTask<Integer, Void, String>{

		private ProgressDialog progressDialog;

		@Override
		protected void onPreExecute() {
			progressDialog = ProgressDialog.show(
					ActualizarPaciente.this,
					"Pacientes", 
					"Espere mientras se elimina el paciente...", 
					true);
			super.onPreExecute();
		}

		@Override
		protected String doInBackground(Integer... params) {

			String resultado = new String();
			String METHOD_NAME = "eliminarPaciente";
			String SOAP_ACTION = NAMESPACE +"/" +METHOD_NAME;
			SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
			SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			soapEnvelope.dotNet = true;
			soapEnvelope.implicitTypes = true;
			soapEnvelope.setOutputSoapObject(request);

			//Se envia por parametro el rut del paciente.
			request.addProperty("pacienteRut", params[0]);

			HttpTransportSE aht = new HttpTransportSE(URL);

			try {
				aht.call(SOAP_ACTION, soapEnvelope);
				SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
				resultado = resultString.toString();

			} catch (IOException e) {
				e.printStackTrace();
			} catch (XmlPullParserException e) {
				e.printStackTrace();
			}

			return resultado;
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			progressDialog.dismiss();
			//Valido que tenga la informacion necesaria
			if("1".equals(result)){
				Toast.makeText(ActualizarPaciente.this, "Eliminada correctamente", Toast.LENGTH_LONG).show();
				finish();
			}else{
				Toast.makeText(ActualizarPaciente.this, "Error al obtener la informacion necesaria", Toast.LENGTH_LONG).show();
			}
		}
	}


}
